package student.aistar.day11;

import student.aistar.day11.compares.Teacher;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class HashSetDemo {
    public static void main(String[] args) {
        Teacher t1 = new Teacher(1,"tom",23);
        Teacher t2 = new Teacher(2,"jack",25);
        Teacher t3 = new Teacher(3,"james",26);
        Teacher t4 = new Teacher(1,"toms",23);

        /**
         * 添加数据到容器的原理:
         *
         * 1. 当把对象添加到容器中之前,会调用对象的hashCode方法,得到一个哈希值.
         * 2. 如果这个哈希值在这之前没有出现过,说明这个位置没有被占用,那么就可以直接将这个对象放入到这个容器中的这个位置
         * 3. 如果这个哈希值在这之前出现过了.产生了哈希碰撞或者哈希冲突.但是这个时候,还不能确定哈希碰撞的俩个对象是同一个对象
         * 4. 继续调用对象的equals方法,如果返回true,说明是同一个对象.则拒绝添加.
         */
        Set<Teacher> sets = new HashSet<>();
        sets.add(t1);
        sets.add(t2);
        sets.add(t3);
        sets.add(t4);

        System.out.println(sets.size());//集合大小

        //因为sets是无序的,所以没有提供可以根据下标获取数据的方法
        //不支持普通for循环的遍历,但是支持集合迭代器的遍历方式
        //支持增强for循环的遍历.
//        for (Teacher t : sets) {
//            System.out.println(t);
//        }

        Iterator<Teacher> iter = sets.iterator();
        while(iter.hasNext()){
            Teacher t = iter.next();
            System.out.println(t);
        }
    }
}
